package com.anzia.study_3.connections;

import ohos.rpc.*;

// 在Slice中实现
public class MyRemoteProxy implements IRemoteBroker {

	private static final int COMMAND_PLUS = IRemoteObject.MIN_TRANSACTION_ID;
	private static final int COMMAND_METHOD1 = IRemoteObject.MIN_TRANSACTION_ID + 1;
	private static final int ERR_OK = 0;    // 表示通信成功的code：0

	private final IRemoteObject remote;

	// 用构造器初始化远端代理对象，最终是靠onAbilityDisconnectDone接口方法返回来获取
	public MyRemoteProxy(IRemoteObject remote) {
		this.remote = remote;
	}

	// 返回远程对象
	@Override
	public IRemoteObject asObject() {
		return remote;
	}

	// 下面的方法就是我们的Service Ability的功能
	public int plus(int a, int b) {
		// 传出去的数据
		MessageParcel data = MessageParcel.obtain();    // 返回一个空的MessageParcel 对象
		data.writeInt(a);
		data.writeInt(b);
		// 远端返回回来的响应数据
		MessageParcel reply = MessageParcel.obtain();
		// 指定信息传输的模式的option 这里的设置是同步
		MessageOption option = new MessageOption(MessageOption.TF_SYNC);

		int result = 0;
		try {
			remote.sendRequest(COMMAND_PLUS, data, reply, option); // 最核心方法，实现调用Service Ability的功能
			// 上面的语句执行完毕后，通信就结束了，响应的结果就在reply容器了
			// 判断通信成功不，如果传输成功，那么可以接收到reply，读取reply中的值
			int ec = reply.readInt();
			if (ec != ERR_OK) {
				throw new RemoteException();
			}

			result = reply.readInt();

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return result;
	}

	public void otherMethod() {
		// 举例不去实现
	}
}
